/**
 * \class IGenExp.h /GenProg/Interfaces/IGenExp.h
 *
 *  \date 18 maj 2012
 *  \author ytc0039
 *  
 *  \brief 
 */

#ifndef IGENEXP_H_
#define IGENEXP_H_
#include <AbsSyn/AbsSyn.h>
#include <Generator/GenExp.h>
#include <AbsSyn/GenExpClasses/ExpressionType.h>
#include <AbsSyn/TypeEnum.h>


class IGenExp
{
public:
	IGenExp(){
	}

	virtual ~IGenExp()
	{
	}

	/**
	 * \brief Generation of expression
	 *
	 * @param genExpPtr Pointer to a expression generator
	 * @return IExpPtr A new expression pointer
	 */
	virtual AbsSyn::IExpPtr genExp( GenExp::GenExpPtr genExpPtr) const = 0;

	/**
	 * \brief I think this is obsolete.
	 *
	 * It was meant to show how many arguments a expression needs, to be generated.
	 *
	 * @return number of arguments..
	 */
	virtual int getExpNrArg() const = 0;

	virtual bool isTypeMatch(TypeEnum type) const = 0;

};

#endif /* IGENEXP_H_ */
